/**
 * 资产类 - 代表金融市场中的可交易资产
 */
class Asset {
  /**
   * 创建资产实例
   * @param {string} id - 资产唯一标识符
   * @param {string} name - 资产名称
   * @param {number} initialPrice - 初始价格
   * @param {Object} config - 其他配置选项
   */
  constructor(id, name, initialPrice, config = {}) {
    this.id = id;
    this.name = name;
    this.price = initialPrice;
    this.history = [{ 
      time: 0, 
      open: initialPrice,
      high: initialPrice,
      low: initialPrice,
      close: initialPrice,
      volume: 0
    }];
    this.config = {
      volatility: config.volatility || 0.02,
      dividendYield: config.dividendYield || 0,
      ...config
    };
  }

  /**
   * 更新资产价格
   * @param {number} newPrice - 新价格
   * @param {number} time - 时间戳
   * @param {number} volume - 成交量
   */
  updatePrice(newPrice, time, volume = 0) {
    // 更新当前价格
    this.price = newPrice;
    
    // 检查是否是新的时间点
    const lastEntry = this.history[this.history.length - 1];
    if (lastEntry.time === time) {
      // 同一时间点，更新最高价、最低价和成交量
      lastEntry.high = Math.max(lastEntry.high, newPrice);
      lastEntry.low = Math.min(lastEntry.low, newPrice);
      lastEntry.close = newPrice;
      lastEntry.volume += volume;
    } else {
      // 新的时间点，添加新的K线数据
      this.history.push({ 
        time: time, 
        open: newPrice,
        high: newPrice,
        low: newPrice,
        close: newPrice,
        volume: volume
      });
    }
  }

  /**
   * 获取当前价格
   * @returns {number} 当前价格
   */
  getPrice() {
    return this.price;
  }

  /**
   * 获取价格历史
   * @returns {Array} 价格历史记录
   */
  getHistory() {
    return this.history;
  }
}

module.exports = Asset;